/***************************************************************************
 *   Copyright (C) 2008 by BogDan Vatra                                    *
 *   bogdan@licentia.eu                                                    *
 *                                                                         *
 *   This program is free software: you can redistribute it and/or modify  *
 *   it under the terms of the GNU General Public License as published by  *
 *   the Free Software Foundation, either version 3 of the License, or     *
 *   (at your option) any later version.                                   *
 *   This program is distributed in the hope that it will be useful,       *
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
 *   GNU General Public License for more details.                          *
 *   You should have received a copy of the GNU General Public License     *
 *   along with this program.  If not, see <http://www.gnu.org/licenses/>. *
 ***************************************************************************/


#include "gestiuniGrupuri.h"
#include <database.h>
#include <query.h>
#include <QShowEvent>
#include <QMessageBox>
#include <QModelIndex>

using namespace SQL;

GestiuniGrupuriObiecteInventar::GestiuniGrupuriObiecteInventar(QWidget* parent, Qt::WFlags fl)
		: KontAMabilWindow(parent, fl), Ui::gestiuniGrupuriObiecteInventarForm()
{
	setupUi(this);
	connect(grupuri, SIGNAL(currentIndexChanged(const QString &)), SLOT(grupChanged(const QString &)));
}

GestiuniGrupuriObiecteInventar::~GestiuniGrupuriObiecteInventar()
{
}

void GestiuniGrupuriObiecteInventar::showEvent(QShowEvent * event)
{
	if (!defaultDatabase()->query("gestiuniGrupuriObiecteInventar")->canSelect())
	{
		QMessageBox::critical(0, tr("Eroare privilegii"), tr("Nu aveti suficiente drepturi pentru a folosi acest modul"));
		event->ignore();
		return;
	}
	defaultDatabase()->query("gestiuniGrupuriObiecteInventar")->select();
	KontAMabilWindow::showEvent(event);

	grupuri->clear();
	foreach(QSqlRecord rec, defaultDatabase()->query("gestiuniGrupuriObiecteInventar")->result())
		grupuri->addItem(rec.value("rolname").toString());
	grupuri->setCurrentIndex(0);
}

void GestiuniGrupuriObiecteInventar::hideEvent(QHideEvent * event)
{
	connect(grupuri, SIGNAL(currentIndexChanged(const QString &)), this, SLOT(grupChanged(const QString &)));
	defaultDatabase()->query("gestiuniGrupuriObiecteInventar")->close();
	defaultDatabase()->query("gestiuniGrupuriGestiuniInGrup")->close();
	defaultDatabase()->query("gestiuniGrupuriGestiuniInAfaraGrupului")->close();
	KontAMabilWindow::hideEvent(event);
}

void GestiuniGrupuriObiecteInventar::grupChanged(const QString & grup)
{
	defaultDatabase()->query("gestiuniGrupuriGestiuniInGrup")->bindValue("grup", grup);
	defaultDatabase()->query("gestiuniGrupuriGestiuniInAfaraGrupului")->bindValue("grup", grup);
	defaultDatabase()->query("gestiuniGrupuriGestiuniInGrup")->select();
	defaultDatabase()->query("gestiuniGrupuriGestiuniInAfaraGrupului")->select();
}

void GestiuniGrupuriObiecteInventar::on_puneSelectie_clicked()
{
	QSqlQuery qry(defaultDatabase()->database());
	int row=-1;
	foreach(QModelIndex idx, neaccesibile->selectionModel()->selectedIndexes())
	{
		if (row==idx.row())
			continue;;
		row=idx.row();
		qry.prepare( "insert into gestiuni_pe_grupuri_obiecte_inventar (grup, id_gestiune) values(:grup, :id_gestiune)" );
		qry.bindValue( ":grup",grupuri->currentText());
		qry.bindValue( ":id_gestiune", defaultDatabase()->query("gestiuniGrupuriGestiuniInAfaraGrupului")->result()[idx.row()].value( "id" ));
		qry.exec();
	}
	if (-1!=row)
	{
		defaultDatabase()->query("gestiuniGrupuriGestiuniInGrup")->select();
		defaultDatabase()->query("gestiuniGrupuriGestiuniInAfaraGrupului")->select();
	}
}

void GestiuniGrupuriObiecteInventar::on_puneTot_clicked()
{
	QSqlQuery qry(defaultDatabase()->database());
	foreach(QSqlRecord rec, defaultDatabase()->query("gestiuniGrupuriGestiuniInAfaraGrupului")->result())
	{
		qry.prepare( "insert into gestiuni_pe_grupuri_obiecte_inventar (grup, id_gestiune) values(:grup, :id_gestiune)" );
		qry.bindValue( ":grup",grupuri->currentText());
		qry.bindValue( ":id_gestiune", rec.value( "id" ));
		qry.exec();
	}
	if (defaultDatabase()->query("gestiuniGrupuriGestiuniInAfaraGrupului")->size())
	{
		defaultDatabase()->query("gestiuniGrupuriGestiuniInGrup")->select();
		defaultDatabase()->query("gestiuniGrupuriGestiuniInAfaraGrupului")->select();
	}
}

void GestiuniGrupuriObiecteInventar::on_scoateSelectie_clicked()
{
	QSqlQuery qry(defaultDatabase()->database());
	int row=-1;
	foreach(QModelIndex idx, accesibile->selectionModel()->selectedIndexes())
	{
		if (row==idx.row())
			continue;;
		row=idx.row();
		qry.prepare( "delete from gestiuni_pe_grupuri_obiecte_inventar where grup=:grup and id_gestiune=:id_gestiune" );
		qry.bindValue( ":grup",grupuri->currentText());
		qry.bindValue( ":id_gestiune", defaultDatabase()->query("gestiuniGrupuriGestiuniInGrup")->result()[idx.row()].value( "id" ));
		qry.exec();
	}
	if (-1!=row)
	{
		defaultDatabase()->query("gestiuniGrupuriGestiuniInGrup")->select();
		defaultDatabase()->query("gestiuniGrupuriGestiuniInAfaraGrupului")->select();
	}
}

void GestiuniGrupuriObiecteInventar::on_scoateTot_clicked()
{
	QSqlQuery qry(defaultDatabase()->database());
	foreach(QSqlRecord rec, defaultDatabase()->query("gestiuniGrupuriGestiuniInGrup")->result())
	{
		qry.prepare( "delete from gestiuni_pe_grupuri_obiecte_inventar where grup=:grup and id_gestiune=:id_gestiune" );
		qry.bindValue( ":grup",grupuri->currentText());
		qry.bindValue( ":id_gestiune", rec.value( "id" ));
		qry.exec();
	}
	if (defaultDatabase()->query("gestiuniGrupuriGestiuniInGrup")->size())
	{
		defaultDatabase()->query("gestiuniGrupuriGestiuniInGrup")->select();
		defaultDatabase()->query("gestiuniGrupuriGestiuniInAfaraGrupului")->select();
	}
}
